const moment = require('moment')
const mongoose = require('../config/dbHelper')
const Schema = mongoose.Schema
const UserSchema = new Schema({
  username: { type: String, index: { unique: true }, sparse: true }, // 邮箱 sparse 有这个属性才检索
  password: String, // 密码
  name: String, // 昵称
  created: Date, // 注册时间
  updated: Date, // 更新时间
  favs: { type: Number, default: 100 }, // 00 用户积分
  gender: { type: String, default: '' }, // 性别 0：男，1：女
  roles: { type: Array, default: ['user'] }, // 角色 user: 普通用户 admin：管理员 super_admin：超级管理员
  pic: { type: String, default: '/img/avatar.jpg ' }, // 头像
  status: { type: String, default: '0' }, // 状态 0：正常 1：禁言 2：账号禁用
  mobile: { type: String, match: /^((0\d{2,3}-\d{7,8})|(1[123456789]\d{9}))$/ }, // 手机号
  regmark: String, // 个性签名
  location: String, // 城市
  isVip: { type: String, default: '0' }, // 是否是vip用户 0：普通用户 1：会员用户 2-7：定义成vip的level
  count: { type: String, default: 0 } // 签到次数
})

UserSchema.pre('save', function(next) {
  this.created = moment().format('YYYY-MM-DD HH:mm:ss')
  next()
})

UserSchema.pre('update', function(next) {
  this.updated = moment().format('YYYY-MM-DD HH:mm:ss')
  next()
})

UserSchema.post('save', function(error, doc, next) {
  console.log('error: ', error)
  if (error.name === 'MongoError' && error.code === 11000) {
    next(new Error('Error: Mongoose has a duplicate key.'))
  } else {
    next(error)
  }
})

UserSchema.statics = {
  /**
   * 根据id查询用户
   * @param {*} id 用户id
   */
  findById (id) {
    return this.findOne({ _id: id }, {
      password: 0,
      username: 0,
      mobile: 0
    })
  },
  /**
   * 用户列表
   * @param {*} options 筛选条件
   * @param {*} sort 排序方式
   * @param {*} page 分页页数
   * @param {*} limit 分页条数
   */
  getList (options, sort, page, limit) {
    return this.find(options)
      .sort({ [sort]: -1 })
      .skip(page * limit)
      .limit(limit)
      .populate({
        path: 'uid',
        select: 'name'
      })
  }
}

const UserModel = mongoose.model('users', UserSchema)
module.exports = UserModel
